Frida 安卓逆向破解辅助Hook | 您所在的位置:网站首页 › frida 下载 › Frida 安卓逆向破解辅助Hook |
用到的工具 Frida夜神模拟器或者手机Python3.7.2Window系统安装python Python3.7.2 下载地址 win+R 输入cmd,在控制台中输入python,看到如下信息说明安装成功 安装Frida 在命令行中输入 pip install frida pip install frida-tools安装完成后再命令行中输入 frida --version
安装模拟器 或者使用手机(这里使用模拟器) 夜神模拟器下载地址 下载安装frida-server 并安装到模拟器或者手机上 需要使用和frida同一个版本 这里使用14.2.13 frida-server下载地址
使用夜神模拟器演示查看方法: 使用ADB 查看 打开命令行 输入夜神模拟器安装目录下的nox_adb.exe路径 shell getprop ro.product.cpu.abi 下载完成
命令行输入 adb push D:\frida-server /data/local/tmp/ 在模拟器或者手机中文件夹可以看到 安装成功后在手机上启动服务 打开命令行 链接adb设置转发端口 $ D:\SoftWare\Nox\bin\nox_adb.exe forward tcp:27042 tcp:27042 shell连接手机 $ D:\SoftWare\Nox\bin\nox_adb.exe shell 输入su 切换到root用户 $ su 切换目录 $ cd /data/local/tmp 输入chmod 获取权限 $chmod 777 frida-server 启动 frida-server $ ./frida-server 测试是否启动成功 打开一个新的命令行 当前这个不要关掉输入frida-ps -R 获取启动frida-server的手机上正在运行的应用![]() 创建一个用来被自己破解的安卓应用 AndroidStudio3.5下载地址 配置好AndroidStudio环境 (包括AndroidSDK ,JDK,Gradle等 ) 打开AndroidStudio创建安卓空项目 在布局文件上添加安卓界面 接下来用frida hook把一步一步这个按钮功能改了 需要一些python代码以及javascript代码 先编写python代码尝试执行frida 的功能 import frida # 获取模拟器或者手机上已连接的设备 device = frida.get_remote_device() print(device)打开命令行执行python脚本
接下来完善脚本 import frida # 获取模拟器或者手机上已连接的设备 device = frida.get_remote_device() # print(device) # 获取device上的所有app applications = device.enumerate_applications() for application in applications: print(application)打印出手机上已安装的app则成功 接下来附加到应用 import frida # 获取模拟器或者手机上已连接的设备 device = frida.get_remote_device() # print(device) # 获取device上的所有app # applications = device.enumerate_applications() # for application in applications: # print(application) # 附加到应用 session = device.attach("com.example.hookapp") jsScript = """ console.log('this is javascript code') """ # 加载Javascript代码 script = session.create_script(jsScript) # 执行 script.load()执行后打印出 this is javascript code 成功 因为大量的hook操作需要在javascript中执行 所以将javascript代码独立出来 创建文件hook.js ,找到需要hook的函数 写下代码 // 程序入口 Java.perform(function() { // 获取类 var clazz = Java.use("com.example.hookapp.MainActivity"); // 获取类中所有函数 var methods = clazz.class.getDeclaredMethods(); console.log("have method count:"+methods.length); if(methods.length > 0){ //遍历函数名 methods.forEach(function(method){ console.log(method); }); } });修改python执行脚本 hook.py import frida # 获取模拟器或者手机上已连接的设备 device = frida.get_remote_device() # print(device) # 获取device上的所有app # applications = device.enumerate_applications() # for application in applications: # print(application) # 附加到应用 session = device.attach("com.example.hookapp") # jsScript = """ # console.log('this is javascript code') # """ file = open("hook.js",mode='r',encoding='UTF-8') scr = file.read() # 加载Javascript代码 script = session.create_script(scr) # 执行 script.load()在命令行 将目录切换到python脚本目录之后执行 $ cd D:\Developer\Hook\script $ D: $ hook.py在命令行中显示两个函数 修改hook.js // 程序入口 Java.perform(function() { // 获取类 var clazz = Java.use("com.example.hookapp.MainActivity"); // 获取类中所有函数 // var methods = clazz.class.getDeclaredMethods(); // console.log("have method count:"+methods.length); // if(methods.length > 0){ // //遍历函数名 // methods.forEach(function(method){ // console.log(method); // }); // } clazz.ShowWord.implementation = function(a) { console.log("Hook success") return this.ShowWord("this is my hook method"); } });修改hook.py 加上等待系统输入让程序暂停等待hook import sys sys.stdin.read() import frida import sys # 获取模拟器或者手机上已连接的设备 device = frida.get_remote_device() # print(device) # 获取device上的所有app # applications = device.enumerate_applications() # for application in applications: # print(application) # 附加到应用 session = device.attach("com.example.hookapp") # jsScript = """ # console.log('this is javascript code') # """ file = open("hook.js",mode='r',encoding='UTF-8') scr = file.read() # 加载Javascript代码 script = session.create_script(scr) # 执行 script.load() sys.stdin.read()执行hook.py 成功hook 按钮 并修改 |
CopyRight 2018-2019 实验室设备网 版权所有 |